jQuery.fn.closable = function(optionsOfButton, optionsOfOuter, callback) {
	var defaultsOfButton = 
	{
		btnClass:'dhCloseButton',
		text: null,
		position:'absolute',
		display:'none',
		width:'auto',
		top:'0',
		right:'0',
		isDelExcute:true
	};
	var defaultsOfOuter = 
	{
		position:'relative'
	};
	var optOfButton = jQuery.extend(defaultsOfButton,optionsOfButton);
	var optOfOuter = jQuery.extend(defaultsOfOuter,optionsOfOuter);
	return jQuery.each(
		this, 
		function() 
		{
			var $wholeDIV = $(this);
			var closeButton;
			if(optOfButton.text==null) {
				closeButton = $("<input type='button' class='ui-icon-close ui-icon' />");
			}
			else {
				closeButton = $("<input type='button' class='ui-icon-close ui-icon' value="+optOfButton.text+" />");
			}
			try {
				closeButton.button();
			}catch(e) {
			}
			closeButton.attr('id',this.id);
			closeButton.click(
				function(){
					if(optOfButton.isDelExcute) 
						$(this).parent(1).remove();
					
					if($.isFunction(callback)) {
						callback(this.id, $wholeDIV);
					}else {
						eval(callback);
					}
				}
			);
			closeButton.css(optOfButton);
			closeButton.addClass(optOfButton.btnClass);
			$(this).append(closeButton);
			$(this).css(optOfOuter);
			try 
			{
				var hoverConfig = 
				{
					sensitivity: 3, // number = sensitivity threshold (must be 1 or higher)    
					interval: 200, // number = milliseconds for onMouseOver polling interval    
					over: function()
					{
						closeButton.show();
					}, // function = onMouseOver callback (REQUIRED)    
					timeout: 500, // number = milliseconds delay before onMouseOut    
					out: function()
					{
						closeButton.hide();
					} // function = onMouseOut callback (REQUIRED)    
				};
				$(this).hoverIntent(hoverConfig);
			}catch(e) {
				// todo : 
			}
		}
	);
};